package com.mcgrady.collection;

import jdk.swing.interop.SwingInterOpUtils;
import org.junit.Test;

import java.util.*;

/**
 * @author McGrady
 */
public class ListTest {
    @Test
    public void build(){
        // 创建一个初始容量为20的Integer泛型的ArrayList
        List <String> arrayList = new ArrayList<>(20);

        // 向ArrayList追加国家
        arrayList.add("葡萄牙");
        arrayList.add("西班牙");
        arrayList.add("英国");
        arrayList.add("日本");

        // 在0号位添加一个法国，其余元素依次向后移动一个位置
        arrayList.add(0,"法国");

        // 将法国修改为德国
        arrayList.set(0,"德国");

        // 使用forEach来遍历list
        for (String e : arrayList) {
            System.out.println(e);
        }

        // 使用for i来遍历list
        for (int i = 0,j = arrayList.size(); i < j ;i++) {
            System.out.println(i + " : " + arrayList.get(i));
        }

        // 将日本删除
        if(arrayList.contains("日本")){
            arrayList.remove("日本");
        }

        // 将3号元素删除
        arrayList.remove(3);

        // ArrayList是可以直接打印查看的
        System.out.println(arrayList);

        // 清空列表
        arrayList.clear();

        // 查看ArrayList是否为空
        System.out.println(arrayList.isEmpty()? "list为空" : "list不为空");

        // 快速创建一个list接口（不是ArrayList）
        List<String> countries = List.of("中国","日本","西班牙","葡萄牙");

        // 将list转成数组（只能转成Object数组）
        Object[] countriesArr = countries.toArray();
        System.out.println(Arrays.toString(countriesArr));
    }

    @Test
    public void linkedList(){
        LinkedList<String> linkedList = new LinkedList<>();

        //追加
        linkedList.add("China");
        linkedList.add("Japan");

        // 首部添加，返回void
        linkedList.addFirst("China");

        // 尾部添加，返回void
        linkedList.addLast("Thailand");

        // 尾部添加，返回boolean，1.6
        linkedList.offerLast("US");

        // 首部添加，返回boolean，1.6
        linkedList.offerFirst("France");

        // 首部添加：底层调用addFirst()
        linkedList.push("Congo");
        System.out.println("add over" + linkedList);

        // 取出0号位元素
        System.out.println(linkedList.get(0));

        // 返回首位元素
        System.out.println(linkedList.getFirst());

        // 返回最后一个元素
        System.out.println(linkedList.getLast());

        // 查看链表头
        System.out.println(linkedList.peekFirst());

        // 查看链表尾
        System.out.println(linkedList.peekLast());

        // 将1号元素替换为UK
        linkedList.set(1,"UK");
        System.out.println(linkedList);

        // 弹出链表头，若不存在则返回null
        System.out.println(linkedList.pollFirst());

        // 弹出链表尾
        System.out.println(linkedList.pollLast());

        // 弹出链表头，若不存在抛异常
        System.out.println(linkedList.pop());

        // 删除0号元素
        System.out.println(linkedList.remove(0));

        // 删除UK
        System.out.println(linkedList.remove("UK"));

        // 移除链表头
        System.out.println(linkedList.removeFirst());

        // 移除链表尾
        System.out.println(linkedList.removeLast());

        // for-i遍历
        for (int i = 0,j = linkedList.size(); i < j;i++) {
            System.out.println(i + " : " + linkedList.get(i));
        }

        // for-e遍历
        for (String e : linkedList) {
            System.out.println("e : " + e);
        }
    }
}
